<?php
/**
 * Created by PhpStorm.
 * User: mayy
 * Date: 2017/7/25
 * Time: 14:14
 */
use app\common\com\push\PushBase;

Vendor('getui.IGt','.Push.php');

class GeTui extends PushBase {

    public function __construct($config)
    {
        parent::__construct($config);
    }

    /**
     * 发送消息给单个用户
     *
     * @author mayy
     * @date 2017-7-25
     * @param $clientId
     * @param string $title 标题
     * @param string $content 消息实体内容
     * @param string $page 要跳转的页面
     * @param string $params 跳转时携带的参数，格式为 k1=v1&ke=v2
     * @return mixed|null
     */
    public function sendToOne($clientId, $title, $content, $page = '', $params = '')
    {
        if (empty($clientId) || empty($title) || empty($content)) {
            exception('缺少必要的推送参数！');
        }

        $igt = new \IGeTui($this->_host, $this->_appKey, $this->_masterSecret);

        /*
         * 消息模板有：
         *  1.TransmissionTemplate:透传功能模板
         *  2.LinkTemplate:通知打开链接功能模板
         *  3.NotificationTemplate：通知透传功能模板
         *  4.NotyPopLoadTemplate：通知弹框下载功能模板
         */

        //设置纯透传template
        $template =  $this->setTransmissionTemplate($title, $content, $page, $params);


        //透传通知的template（点击通知栏后，会把透传内容传给客户端）
        //$template =  $this->setBarandTransmissionTemplate($title, $content, $page, $params);

        //定义"SingleMessage"
        $message  =  $this->setMessage($template);

        //接收方
        $target = new IGtTarget();
        $target->set_appId($this->_appId);
        $target->set_clientId($clientId);

        //$target->set_alias(Alias);

        try {
            $rep = $igt->pushMessageToSingle($message, $target);
        } catch(RequestException $e) {
            $requstId =$e->getRequestId();
            //失败时重发
            $rep = $igt->pushMessageToSingle($message, $target,$requstId);
        }

        return $rep;
    }

    /**
     * 发送消息给指定用户列表
     *
     * @author mayy
     * @date 2017-7-25
     * @param array $user_list
     * @param string $title 标题
     * @param string $content 消息实体内容
     * @param string $page 要跳转的页面
     * @param string $params 跳转页面时携带的参数
     * @return void
     */
    public function sendToList(array $user_list, $title, $content, $page = '', $params = '')
    {

    }

    /**
     * 定义 message
     *
     * @author mayy
     * @date 2017-7-25
     * @param $template
     * @return IGtSingleMessage
     */
    public function setMessage($template)
    {
        $message = new IGtSingleMessage();

        //是否离线
        $message->set_isOffline(true);

        //离线时间
        $message->set_offlineExpireTime(3600*12*1000);

        //设置推送消息类型
        $message->set_data($template);

        //设置是否根据WIFI推送消息，2为4G/3G/2G，1为wifi推送，0为不限制推送
        $message->set_PushNetWorkType(0);

        return $message;
    }

    /**
     * 透传类型的推送，需要客户端自己做出通知栏样式
     *
     * @author mayy
     * @date 2017-7-25
     * @param string $title 标题
     * @param string $content 消息实体内容
     * @param string $page 要跳转的页面
     * @param string $params 跳转时，携带的参数，为 k=v&k=v 格式
     * @return IGtTransmissionTemplate
     */
    private function setTransmissionTemplate($title, $content, $page = '', $params = '')
    {
        $template =  new \IGtTransmissionTemplate();
        $template->set_appId($this->_appId);                      //应用appid
        $template->set_appkey($this->_appKey);                    //应用appkey

        $template->set_transmissionType(2);            //透传消息类型

        $msg = [
            'page'      => $page,
            'title'     => $title,
            'content'   => $content,
            'params'    => $params,
        ];
        $template->set_transmissionContent(json_encode($msg, JSON_UNESCAPED_UNICODE));//透传内容

        return $template;
    }

    /**
     * 带透传的通知栏，用户点击通知后，会把透传内容传递给客户端
     *
     * @param $title
     * @param $content
     * @param string $page 要跳转的页面
     * @param string $params 跳转时，携带的参数，为 k=v&k=v 格式
     * @return IGtNotificationTemplate
     */
    private function setBarandTransmissionTemplate($title, $content, $page = '', $params = '')
    {
        //通知栏
        $template =  new IGtNotificationTemplate();

        $template->set_appId($this->_appId);
        $template->set_appkey($this->_appKey);

        //透传消息类型,1：强制打开应用   2：等待客户端应用启动
        $template->set_transmissionType(2);

        //透传内容
        $msg = [
            'page'      => $page,
            'title'     => $title,
            'content'   => $content,
            'params'    => $params,
        ];
        $template->set_transmissionContent(json_encode($msg, JSON_UNESCAPED_UNICODE));

        //通知栏标题
        $template->set_title($title);

        //通知栏内容
        $template->set_text("个推最新版点击下载");

        //通知栏logo
        $template->set_logo("");

        //是否响铃
        $template->set_isRing(true);

        //是否震动
        $template->set_isVibrate(true);

        //通知栏是否可清除
        $template->set_isClearable(true);

        //设置ANDROID客户端在此时间区间内展示消息
        //$template->set_duration(BEGINTIME,ENDTIME);

        return $template;
    }

}